package com.songshuai.webapi.permission.service;

import com.songshuai.webapi.baseapi.pojo.BaseParmDto;
import com.songshuai.webapi.baseapi.pojo.QueryPageRes;
import com.songshuai.webapi.baseapi.pojo.QueryResponse;
import com.songshuai.webapi.permission.dto.request.*;
import com.songshuai.webapi.permission.dto.response.RoleListResDto;
import java.util.*;

public interface RolesService {

    /**
     * 查询角色列表
     * @param parmDto
     * @return
     */
    QueryResponse<List<RoleListResDto>> queryRolesList(BaseParmDto<RolesReqDto> parmDto);

    /**
     * 新增角色
     * @param roleAddDto
     * @return
     */
    QueryResponse insert(RoleAddDto roleAddDto);

    /**
     * 更新角色
     * @param roleEditDto
     * @return
     */
    QueryResponse updateByRoleId(RoleEditDto roleEditDto);

    /**
     * 逻辑删除角色信息
     * @param roleId 角色ID
     * @return
     */
    QueryResponse deleteRoleById(Integer roleId);

    /**
     * 启用禁用角色
     * @param roleEnabledDto
     * @return
     */
    QueryResponse enabledRoleById(RoleEnabledDto roleEnabledDto );

    /**
     * 根据角色ID和APPID,查询菜单列表，并标注首页打勾项
     * @param reqDto 角色首页请求实体
     * @return 相应角色的菜单列表，并标注首页打勾项
     */
    Map<String,Object> queryHomePageInfo(RoleHomePageReqDto reqDto);

    /**
     * 给角色分配权限
     * @param resDto 角色分配权限请求实体
     * @return QueryResponse。发生异常时，直接抛出到控制层，控制层catch后处理。
     */
    QueryResponse addRoleNavigationRelation(RoleRelateNavigationReqDto resDto);

    /**
     * 保存主页信息
     * @param record
     * @return
     */
    QueryResponse insertYxHomepageConfig(YxHomepageConfigReqDto record);

    /**
     * 根据角色ID和appId，查询菜单以及功能，并标识打勾项
     * @param roleId 角色ID
     * @param appId 应用ID
     * @return QueryResponse 菜单以及功能Map，并标识打勾项
     */
    QueryResponse queryRoleNavAndFuncList(Integer roleId, Integer appId);

    /**
     * 查询该角色关联的用户列表
     * @param roleUserListReqDto
     * @return
     */
    QueryResponse  queryUserList(RoleUserListReqDto roleUserListReqDto);

    /**
     * 删除角色用户的关联关系
     * @param roleUserDelReqDto
     * @return
     */
    QueryResponse  delUserRoleById(RoleUserDelReqDto roleUserDelReqDto);

    /**
     * 给角色分配人员
     * @param roleUserReqDto
     * @return
     */
    QueryResponse insertRoleUsers(RoleUserReqDto roleUserReqDto);

    List<Integer> queryUserListByRoleId(Integer roleId);

    Set<Integer> queryRoleCampusIdsSet(BaseParmDto<RolesReqDto> parmDto);

}
